package com.youlai.boot.bmp.service;

import com.aizuda.bpm.engine.entity.FlwHisInstance;
import com.aizuda.bpm.engine.entity.FlwProcess;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.bmp.model.form.BizProcessForm;
import com.youlai.boot.bmp.model.form.InstanceForm;
import com.youlai.boot.bmp.model.query.BizInstanceQuery;
import com.youlai.boot.bmp.model.query.BizProcessCategoryQuery;
import com.youlai.boot.bmp.model.vo.BizProcessCategoryListVo;
import com.youlai.boot.bmp.model.vo.BizProcessVo;

import java.util.List;


public interface BizProcessService {


    List<FlwProcess> getProcessList();

    /**
     * 部署业务流程
     *
     * @param form 模型表单项
     * @return 返回流程实例ID
     */
    Long deployBizProcess(BizProcessForm form);

    /**
     * 获取业务流程定义视图
     *
     * @param id 业务流程定义ID
     * @return 业务流程定义视图,为查询到返回null
     */
    BizProcessVo getBizProcessById(Long id);

    /**
     * 获取业务流程定义视图列表
     *
     * @param ids 业务流程定义ID列表
     * @return 业务流程定义视图列表, 如果未查询到返回一个空List
     */
    List<BizProcessVo> getBizProcessList(List<Long> ids);

    /**
     * 获取业务流程定义分类列表
     *
     * @param queryParams 查询参数
     * @return 业务流程定义分类列表
     */
    Page<BizProcessCategoryListVo> getBizProcessCategoryList(BizProcessCategoryQuery queryParams);

    boolean switchProcessStatus(Long processId,Integer status);

    /**
     * 发起流程
     *
     * @param instanceForm 流程参数
     * @param userId 发起流程用户ID
     * @return 是否启动成功
     */
    boolean startInstance(InstanceForm instanceForm, Long userId);


    /**
     * 获取指定用户的流程实例列表（如果不传则默认全部）
     *
     * @param userId 用户ID
     * @param instanceQuery 查询参数
     * @return 流程实例列表
     */
    Page<FlwHisInstance> getInstanceList(Long userId, BizInstanceQuery instanceQuery);

}
